package com.bupt.cad.service.impl;

//import com.bupt.cad.auth.TokenGenerator;
import com.bupt.cad.dto.LoginDTO;
import com.bupt.cad.entity.SysToken;
import com.bupt.cad.entity.User;
import com.bupt.cad.mapper.SysTokenDao;
import com.bupt.cad.mapper.UserDao;
import com.bupt.cad.service.IShiroService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Service
public class ShiroService implements IShiroService {


    @Autowired
    private UserDao userDao;
//    @Autowired
//    private SysTokenDao sysTokenDao;

    /**
     * 根据username查找用户
     *
     * @param username
     * @return User
     */
    @Override
    public User findByUsername(String username) {
        User user = userDao.findByUsername(username);
        return user;
    }

//    //12小时后过期
//    private final static int EXPIRE = 3600 * 12;

//    @Override
//    /**
//     * 生成一个token
//     *@param  [userId]
//     *@return Result
//     */
//    public Map<String, Object> createToken(Integer userId) {
//        Map<String, Object> result = new HashMap<>();
//        //生成一个token
//        String token = TokenGenerator.generateValue();
//        //当前时间
//        Date dateNow = new Date();
//        //LocalDateTime now = new LocalDateTime();
//        LocalDateTime now = dateNow.toInstant()
//                .atZone( ZoneId.systemDefault() )
//                .toLocalDateTime();
//        //过期时间
//        Date dateExpireTime = new Date(dateNow.getTime() + EXPIRE * 1000);
//        LocalDateTime expireTime = dateExpireTime.toInstant()
//                .atZone( ZoneId.systemDefault() )
//                .toLocalDateTime();
//        //判断是否生成过token
//        SysToken tokenEntity = sysTokenDao.findByUserId(userId);
//        if (tokenEntity == null) {
//            tokenEntity = new SysToken();
//            tokenEntity.setUserId(userId);
//            tokenEntity.setToken(token);
//            tokenEntity.setUpdateTime(now);
//            tokenEntity.setExpireTime(expireTime);
//            //保存token
//            sysTokenDao.save(tokenEntity);
//        } else {
//            tokenEntity.setToken(token);
//            tokenEntity.setUpdateTime(now);
//            tokenEntity.setExpireTime(expireTime);
//            //更新token
//            sysTokenDao.save(tokenEntity);
//        }
//        result.put("token", token);
//        result.put("expire", EXPIRE);
//        return result;
//    }

//    @Override
//    public void logout(String token) {
////        SysToken byToken = findByToken(token);
////        //生成一个token
////        token = TokenGenerator.generateValue();
////        //修改token
////        SysToken tokenEntity = new SysToken();
////        tokenEntity.setUserId(byToken.getUserId());
////        tokenEntity.setToken(token);
////        sysTokenDao.save(tokenEntity);
//    }
//
//    @Override
//    public SysToken findByToken(String accessToken) {
//        return sysTokenDao.findByToken(accessToken);
//
//    }
//
//    @Override
//    public User findByUserId(Integer userId) {
//        return userDao.findByUserId(userId);
//    }

    @Override
    public boolean register(LoginDTO registerUser) {
        User user = findByUsername(registerUser.getUsername());
        if(user!=null)return false;
        user = new User();
        user.setUsername(registerUser.getUsername());
        user.setPassword(registerUser.getPassword());
        userDao.save(user);
        return true;
    }
}